EC2 인스턴스에 CloudWatch Agent를 설치해서 메모리 사용량 확인해 보기
안녕하세요 클래스메소드 김재욱(Kim Jaewook) 입니다. 이번에는 EC2 인스턴스에 CloudWatch Agent를 설치해서 메모리 사용량을 확인해 봤습니다.
CloudWatch Agent란?
EC2 인스턴스에 CloudWatch Agent를 설치하면, 더 많은 지표를 수집할 수 있습니다. CloudWatch에서 메모리 모니터링은 불가능하지만, CloudWatch Agent에서는 메모리를 모니터링해서 메모리 사용량을 볼 수 있습니다. 그 외에도 온프레미스 서버에서도 CloudWatch Agent를 설치해서 사용할 수 있습니다.
CloudWatch Agent 설치
CloudWatch Agent 작업은 다음 순으로 진행됩니다.
- IAM Role 생성
- EC2 인스턴스에 IAM Role 연결
- EC2 인스턴스에 CloudWatch Agent 설치
- CloudWatch Agent로 메모리 사용량 확인
IAM Role 생성
IAM에서 역할로 들어간 다음「역할 만들기」버튼을 클릭합니다.
EC2를 선택하고 다음으로 넘어갑니다.
「CloudWatchAgentServerPolicy」정책을 검색해서 선택합니다.
적당히 역할 이름을 써주고「역할 만들기」버튼을 클릭해서 역할을 생성합니다.
EC2 인스턴스에 IAM Role 연결
역할을 연결할 EC2 인스턴스를 선택하고, 작업->보안->IAM 역할 수정으로 들어갑니다.
마지막으로 조금전 만들어두었던 IAM Role을 선택하고 저장 버튼을 클릭합니다.
EC2 인스턴스에 CloudWatch Agent 설치
sudo yum install amazon-cloudwatch-agent
다음 명령어로 CloudWatch Agent 파일을 설치합니다.
find / -name amazon-cloudwatch-agent-config-wizard
파일 설치가 완료되면, 위 명령어로 설치된 마법사 파일을 찾아냅니다.
cd /opt/aws/amazon-cloudwatch-agent/bin/ sudo ./amazon-cloudwatch-agent-config-wizard
해당 파일이 있는 경로로 들어가서 마법사 파일을 실행합니다.
============================================================= = Welcome to the AWS CloudWatch Agent Configuration Manager = ============================================================= On which OS are you planning to use the agent? 1. linux 2. windows 3. darwin default choice: [1]: 1 Trying to fetch the default region based on ec2 metadata... Are you using EC2 or On-Premises hosts? 1. EC2 2. On-Premises default choice: [1]: 1 Which user are you planning to run the agent? 1. root 2. cwagent 3. others default choice: [1]: 2 Do you want to turn on StatsD daemon? 1. yes 2. no default choice: [1]: 2 Do you want to monitor metrics from CollectD? 1. yes 2. no default choice: [1]: 2 Do you want to monitor any host metrics? e.g. CPU, memory, etc. 1. yes 2. no default choice: [1]: 1 Do you want to monitor cpu metrics per core? Additional CloudWatch charges may apply. 1. yes 2. no default choice: [1]: 1 Do you want to add ec2 dimensions (ImageId, InstanceId, InstanceType, AutoScalingGroupName) into all of your metr ics if the info is available? 1. yes 2. no default choice: [1]: 1 Would you like to collect your metrics at high resolution (sub-minute resolution)? This enables sub-minute resolu tion for all metrics, but you can customize for specific metrics in the output json file. 1. 1s 2. 10s 3. 30s 4. 60s default choice: [4]: 4 Which default metrics config do you want? 1. Basic 2. Standard 3. Advanced 4. None default choice: [1]: 3 Current config as follows: { "agent": { "metrics_collection_interval": 60, "run_as_user": "cwagent" }, "metrics": { "append_dimensions": { "AutoScalingGroupName": "${aws:AutoScalingGroupName}", "ImageId": "${aws:ImageId}", "InstanceId": "${aws:InstanceId}", "InstanceType": "${aws:InstanceType}" }, "metrics_collected": { "cpu": { "measurement": [ "cpu_usage_idle", "cpu_usage_iowait", "cpu_usage_user", "cpu_usage_system" ], "metrics_collection_interval": 60, "resources": [ "*" ], "totalcpu": false }, "disk": { "measurement": [ "used_percent", "inodes_free" ], "metrics_collection_interval": 60, "resources": [ "*" ] }, "diskio": { "measurement": [ "io_time", "write_bytes", "read_bytes", "writes", "reads" ], "metrics_collection_interval": 60, "resources": [ "*" ] }, "mem": { "measurement": [ "mem_used_percent" ], "metrics_collection_interval": 60 }, "netstat": { "measurement": [ "tcp_established", "tcp_time_wait" ], "metrics_collection_interval": 60 }, "swap": { "measurement": [ "swap_used_percent" ], "metrics_collection_interval": 60 } } } } Do you have any existing CloudWatch Log Agent (http://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/AgentReference.ht ml) configuration file to import for migration? 1. yes 2. no default choice: [2]: 2 Do you want to monitor any log files? 1. yes 2. no default choice: [1]: 2 Saved config file to /opt/aws/amazon-cloudwatch-agent/bin/config.json successfully. Current config as follows: { "agent": { "metrics_collection_interval": 60, "run_as_user": "cwagent" }, "metrics": { "append_dimensions": { "AutoScalingGroupName": "${aws:AutoScalingGroupName}", "ImageId": "${aws:ImageId}", "InstanceId": "${aws:InstanceId}", "InstanceType": "${aws:InstanceType}" }, "metrics_collected": { "cpu": { "measurement": [ "cpu_usage_idle", "cpu_usage_iowait", "cpu_usage_user", "cpu_usage_system" ], "metrics_collection_interval": 60, "resources": [ "*" ], "totalcpu": false }, "disk": { "measurement": [ "used_percent", "inodes_free" ], "metrics_collection_interval": 60, "resources": [ "*" ] }, "diskio": { "measurement": [ "io_time", "write_bytes", "read_bytes", "writes", "reads" ], "metrics_collection_interval": 60, "resources": [ "*" ] }, "mem": { "measurement": [ "mem_used_percent" ], "metrics_collection_interval": 60 }, "netstat": { "measurement": [ "tcp_established", "tcp_time_wait" ], "metrics_collection_interval": 60 }, "swap": { "measurement": [ "swap_used_percent" ], "metrics_collection_interval": 60 } } } } Please check the above content of the config. The config file is also located at /opt/aws/amazon-cloudwatch-agent/bin/config.json. Edit it manually if needed. Do you want to store the config in the SSM parameter store? 1. yes 2. no default choice: [1]: 2 Program exits now.
log는 모니터링하지 않고, CPU, 메모리만 나오도록 설정합니다.
sudo ./amazon-cloudwatch-agent-ctl -a fetch-config -m ec2 fil e://opt/aws/amazon-cloudwatch-agent/bin/config.json -s
마법사로 설정한 json 파일을 불러옵니다.
sudo amazon-cloudwatch-agent-ctl -m ec2 -a status
현재 CloudWatch Agent 상태를 확인해보면 stopped로 나옵니다.
sudo amazon-cloudwatch-agent-ctl -m ec2 -a start
다음 명령어로 CloudWatch Agent를 실행합니다.
sudo amazon-cloudwatch-agent-ctl -m ec2 -a status
다시 상태를 확인해보면 running로 바뀐 것을 볼 수 있습니다.
ps -ef|grep amazon-cloudwatch-agent
해당 명령어로 현재 amazon-cloudwatch-agent가 실행 중인지 확인해 보면 정상적으로 실행되고 있는 것을 확인할 수 있습니다.
/opt/aws/amazon-cloudwatch-agent/logs sudo more amazon-cloudwatch-agent.log
해당 명령어로 로그 상태를 보면서 에러가 없는지 확인할 수 있습니다.
CloudWatch Agent로 메모리 사용량 확인
모든 지표를 클릭해보면 사용자 지정 네임스페이스에 CloudWatch Agent가 추가된 것을 볼 수 있습니다.
CloudWatch Agent를 클릭해서 들어가보면, 성공적으로 EC2 인스턴스 메모리 사용량을 확인할 수 있습니다.